﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LogicaNegocio;
using Entidades;

namespace UI
{
    public partial class FrmUsuario_Nuevo : Form
    {
        private Rol rol;
        private Agencia agencia;

        public FrmUsuario_Nuevo()
        {
            InitializeComponent();
        }

        private void FrmUsuario_Nuevo_Load(object sender, EventArgs e)
        {
            this.rol = new Rol();
            this.agencia = new Agencia();
            this.cboRol.DisplayMember = "Nombre";
            this.cboRol.ValueMember = "Codigo";
            RolLN rol = new RolLN();
            this.cboRol.DataSource = rol.SelectAll();
            this.cboRol.SelectedIndex = -1;
            this.cboAgencia.DisplayMember = "Nombre";
            this.cboAgencia.ValueMember = "Codigo";
            AgenciaLN agencia = new AgenciaLN();
            this.cboAgencia.DataSource = agencia.SelectAll();
            this.cboAgencia.SelectedIndex = -1;
        }

        private void Limpiar(object sender, EventArgs e)
        {
            this.txtNombreUsuario.Clear();
            this.txtNombre.Clear();
            this.txtApellidos.Clear();
            this.txtCedula.Clear();
            this.txtE_Mail.Clear();
            this.cboRol.SelectedIndex = -1;
            this.txtContraseña.Clear();
            this.txtContraseña_Leave(sender, e);
            this.txtContraseñaRepetir.Clear();
            this.txtContraseñaRepetir_Leave(sender, e);
        }

        #region Click

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            this.ptbLoading.Visible = true;
            this.btnGuardar.Enabled = false;
            this.rol = (Rol)this.cboRol.SelectedItem;
            this.agencia = (Agencia)this.cboAgencia.SelectedItem;
            this.bgwGuardar.RunWorkerAsync();
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void txtNombreUsuario_Leave(object sender, EventArgs e)
        {
            if (this.txtNombreUsuario.Text != "")
            {
                if (!this.bgwVerificaUsuario.IsBusy)
                {
                    this.ptbLoading.Visible = true;
                    this.bgwVerificaUsuario.RunWorkerAsync();
                }
            }
        }

        #endregion

        #region BackgroundWorker

        private void bgwVerificaUsuario_DoWork(object sender, DoWorkEventArgs e)
        {
            UsuarioLN usuario = new UsuarioLN();
            try
            {
                this.bgwVerificaUsuario.ReportProgress(0, "Validando...");
                usuario.ExisteUsuario(this.txtNombreUsuario.Text);
                this.bgwVerificaUsuario.ReportProgress(1, "Nombre de usuario disponible.");
            }
            catch (Exception)
            {
                this.bgwVerificaUsuario.ReportProgress(3, "El nombre de usuario ya esta en uso.");
            }
        }

        private void bgwVerificaUsuario_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.lblMensaje.Text = e.UserState.ToString();
        }

        private void bgwVerificaUsuario_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.ptbLoading.Visible = false;
        }

        private void bgwGuardar_DoWork(object sender, DoWorkEventArgs e)
        {
            UsuarioLN usuario = new UsuarioLN();
            try
            {
                this.bgwGuardar.ReportProgress(0, "Validando...");
                Usuario nuevoUsuario = new Usuario();
                nuevoUsuario.ID = this.txtNombreUsuario.Text;
                nuevoUsuario.Contraseña = this.txtContraseña.Text;
                nuevoUsuario.Agencia = this.agencia;
                nuevoUsuario.Nombre = this.txtNombre.Text;
                nuevoUsuario.Apellidos = this.txtApellidos.Text;
                nuevoUsuario.Cedula = this.txtCedula.Text;
                nuevoUsuario.E_Mail = this.txtE_Mail.Text;
                nuevoUsuario.Rol = this.rol;
                usuario.NuevoUsuario(nuevoUsuario);
                this.bgwGuardar.ReportProgress(1, "Usuario creado exitosamente.");
            }
            catch (Exception ex)
            {
                this.bgwGuardar.ReportProgress(3, ex.Message);
            }
        }

        private void bgwGuardar_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.lblMensaje.Text = e.UserState.ToString();
            if (e.ProgressPercentage == 1)
            {
                this.Limpiar(sender, e);
            }
        }

        private void bgwGuardar_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.ptbLoading.Visible = false;
            this.btnGuardar.Enabled = true;
        }

        #endregion

        #region TextBox

        private void txtContraseña_Enter(object sender, EventArgs e)
        {
            if (this.txtContraseña.Text == "Contraseña")
            {
                this.txtContraseña.PasswordChar = '•';
                this.txtContraseña.Text = "";
                this.txtContraseña.ForeColor = SystemColors.Desktop;
            }
        }

        private void txtContraseña_Leave(object sender, EventArgs e)
        {
            if (this.txtContraseña.Text == "")
            {
                this.txtContraseña.Text = "Contraseña";
                this.txtContraseña.PasswordChar = (char)0;
                this.txtContraseña.ForeColor = SystemColors.GrayText;
            }
        }

        private void txtContraseñaRepetir_Enter(object sender, EventArgs e)
        {
            if (this.txtContraseñaRepetir.Text == "Repita la contraseña")
            {
                this.txtContraseñaRepetir.PasswordChar = '•';
                this.txtContraseñaRepetir.Text = "";
                this.txtContraseñaRepetir.ForeColor = SystemColors.Desktop;
            }
        }

        private void txtContraseñaRepetir_Leave(object sender, EventArgs e)
        {
            if (this.txtContraseñaRepetir.Text == "")
            {
                this.txtContraseñaRepetir.Text = "Repita la contraseña";
                this.txtContraseñaRepetir.PasswordChar = (char)0;
                this.txtContraseñaRepetir.ForeColor = SystemColors.GrayText;
            }
            else
            {
                if (this.txtContraseña.Text == this.txtContraseñaRepetir.Text)
                {
                    this.lblMensaje.Text = "";
                    this.btnGuardar.Enabled = true;
                }
                else
                {
                    this.lblMensaje.Text = "Las contraseñas no coinciden.";
                }
            }
        }

        #endregion


    }
}
